home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Tool Chest / Development Tools & Languages / Macintosh Common Lisp Related / 2.01 sources / Library-2.01 / Interfaces / MEMORY.lisp < prev    next >
Encoding:
Text File  |  1993-09-16  |  12.8 KB  |  472 lines  |  [TEXT/CCL2]

  1.  
  2. (in-package :traps)             ; 
  3. ; Created: Sunday, January 6, 1991 at 10:47 PM
  4. ;     Memory.p
  5. ;     Pascal Interface to the Macintosh Libraries
  6. ;         Copyright Apple Computer, Inc.    1985-1990
  7. ;         All rights reserved
  8.  
  9. ;;;;;;;;;;;;;
  10. ;
  11. ; Modification History
  12. ;
  13. ; 04/28/93 mwp Release
  14. ; 08/10/92 bill typo in _HLockHi
  15. ;               Package prefix for ccl::%ptr-to-int in _deferuserfn
  16. ; ------------- 2.0
  17. ; 02/18/92 gb's fix to _GetPhysical
  18. ;               _MaxMem now works as advertised in Inside Macintosh
  19. ; ------------- 2.0f2
  20. ; 08/23/91 bill _PageFaultFatal had a bogus arg in its call form
  21. ;               Fix _StripAddress, _SystemZone, _ApplicZone,
  22. ;               _ApplicationZone, _TopMem
  23. ;
  24.  
  25. ; $IFC UNDEFINED UsingIncludes
  26. ; $SETC UsingIncludes := 0
  27. ; $ENDC
  28.  
  29. ; $IFC NOT UsingIncludes
  30.  
  31. ; $ENDC
  32.  
  33. ; $IFC UNDEFINED UsingMemory
  34. ; $SETC UsingMemory := 1
  35.  
  36. ; $I+
  37. ; $SETC MemoryIncludes := UsingIncludes
  38. ; $SETC UsingIncludes := 1
  39. ; $IFC UNDEFINED UsingTypes
  40.  
  41. (require-interface 'TYPES)      ; $I $$Shell(PInterfaces)Types.p
  42. ; $ENDC
  43. ; $SETC UsingIncludes := MemoryIncludes
  44.  
  45. (defconstant $maxSize #x800000) ; Max data block size is 8 megabytes
  46. (defconstant $defaultPhysicalEntryCount 8)
  47.  
  48. ;  values returned from the GetPageState function 
  49. (defconstant $kPageInMemory 0)
  50. (defconstant $kPageOnDisk 1)
  51. (defconstant $kNotPaged 2)
  52.  
  53. (def-mactype :size (find-mactype :signed-long));  size of a block in bytes 
  54.  
  55. (def-mactype :thz (find-mactype :pointer))
  56. (defrecord Zone 
  57.    (bkLim :pointer)
  58.    (purgePtr :pointer)
  59.    (hFstFree :pointer)
  60.    (zcbFree :signed-long)
  61.    (gzProc :pointer)
  62.    (moreMast :signed-integer)
  63.    (flags :signed-integer)
  64.    (cntRel :signed-integer)
  65.    (maxRel :signed-integer)
  66.    (cntNRel :signed-integer)
  67.    (maxNRel :signed-integer)
  68.    (cntEmpty :signed-integer)
  69.    (cntHandles :signed-integer)
  70.    (minCBFree :signed-long)
  71.    (purgeProc :pointer)
  72.    (sparePtr :pointer)
  73.    (allocPtr :pointer)
  74.    (heapData :signed-integer)
  75.    )
  76.  
  77. (defrecord MemoryBlock 
  78.    (address :pointer)
  79.    (count :signed-long)
  80.    )
  81.  
  82. (defrecord LogicalToPhysicalTable 
  83.    (logical :memoryblock)
  84.    (physical (:array :memoryblock 8))
  85.    )
  86.  
  87. (def-mactype :pagestate (find-mactype :signed-integer))
  88. (def-mactype :statusregistercontents (find-mactype :signed-integer))
  89.  
  90.  
  91. (deftrap _getappllimit nil
  92.    (:no-trap :pointer)
  93.    (:no-trap (%get-signed-long (%int-to-ptr 304))))
  94.  
  95. (deftrap _getzone nil
  96.    (:a0 (:pointer :zone))
  97.    (:stack-trap #xA11A))
  98.  
  99. (deftrap _systemzone nil
  100.    (:no-trap (:pointer :zone))
  101.    (:no-trap (%get-ptr (%int-to-ptr 678))))
  102.  
  103. (deftrap _appliczone nil
  104.    (:no-trap (:pointer :zone))
  105.    (:no-trap (%get-ptr (%int-to-ptr 682))))
  106.  
  107. (deftrap _applicationzone nil
  108.    (:no-trap (:pointer :zone))
  109.    (:no-trap (%get-ptr (%int-to-ptr 682))))
  110.  
  111. (deftrap _newhandle ((bytecount :signed-long))
  112.    (:a0 :handle)
  113.    (:register-trap #xA122 :d0 bytecount))
  114.  
  115. (deftrap _handlezone ((h :handle))
  116.    (:a0 (:pointer :zone))
  117.    (:register-trap #xA126 :a0 h))
  118.  
  119. (deftrap _recoverhandle ((p :pointer))
  120.    (:a0 :handle)
  121.    (:register-trap #xA128 :a0 p))
  122.  
  123. (deftrap _newptr ((bytecount :signed-long))
  124.    (:a0 :pointer)
  125.    (:register-trap #xA11E :d0 bytecount))
  126.  
  127. (deftrap _ptrzone ((p :pointer))
  128.    (:a0 (:pointer :zone))
  129.    (:register-trap #xA148 :a0 p))
  130.  
  131. (deftrap _gzsavehnd nil
  132.    (:no-trap :handle)
  133.    (:no-trap (%get-signed-long (%int-to-ptr 808))))
  134.  
  135. (deftrap _topmem nil
  136.    (:no-trap :pointer)
  137.    (:no-trap (%get-ptr (%int-to-ptr 264))))
  138.  
  139. (deftrap _maxblock nil
  140.    (:d0 :signed-long)
  141.    (:register-trap #xA061))
  142.  
  143. (deftrap _stackspace nil
  144.    (:d0 :signed-long)
  145.    (:register-trap #xA065))
  146.  
  147. (deftrap _newemptyhandle nil
  148.    (:a0 :handle)
  149.    (:register-trap #xA166))
  150.  
  151. (deftrap _hlock ((h :handle))
  152.    nil
  153.    (:register-trap #xA029 :a0 h))
  154.  
  155. (deftrap _hunlock ((h :handle))
  156.    nil
  157.    (:register-trap #xA02A :a0 h))
  158.  
  159. (deftrap _hpurge ((h :handle))
  160.    nil
  161.    (:register-trap #xA049 :a0 h))
  162.  
  163. (deftrap _hnopurge ((h :handle))
  164.    nil
  165.    (:register-trap #xA04A :a0 h))
  166.  
  167. (deftrap _hlockhi ((h :handle))
  168.    nil
  169.    (:no-trap (ccl:register-trap #xA029 :a0 (ccl:register-trap #xA064 :a0 h))))
  170.  
  171. (deftrap _stripaddress ((theaddress :pointer))
  172.    (:d0 :long)
  173.   (ccl:%int-to-ptr (:register-trap #xA055 :d0 (ccl:%ptr-to-int theaddress))))
  174. ; $ENDC
  175.  
  176. (deftrap _translate24to32 ((addr24 :pointer))
  177.    (:d0 :pointer)
  178.    (:register-trap #xA091 :d0 addr24))
  179.  
  180. (deftrap _tempnewhandle ((logicalsize :signed-long) (resultcode (:pointer :signed-integer)))
  181.    (:stack :handle)
  182.    (:stack-trap #xA88F logicalsize resultcode (29 :signed-integer)))
  183.  
  184. (deftrap _tempmaxmem ((grow (:pointer :signed-long)))
  185.    (:stack :signed-long)
  186.    (:stack-trap #xA88F grow (21 :signed-integer)))
  187.  
  188. (deftrap _tempfreemem nil
  189.    (:stack :signed-long)
  190.    (:stack-trap #xA88F (24 :signed-integer)))
  191.  
  192. ;   Temporary Memory routines renamed, but obsolete, in System 7.0 and later.  
  193.  
  194. (deftrap _temphlock ((h :handle) (resultcode (:pointer :signed-integer)))
  195.    nil
  196.    (:stack-trap #xA88F h resultcode (30 :signed-integer)))
  197.  
  198. (deftrap _temphunlock ((h :handle) (resultcode (:pointer :signed-integer)))
  199.    nil
  200.    (:stack-trap #xA88F h resultcode (31 :signed-integer)))
  201.  
  202. (deftrap _tempdisposehandle ((h :handle) (resultcode (:pointer :signed-integer)))
  203.    nil
  204.    (:stack-trap #xA88F h resultcode (32 :signed-integer)))
  205.  
  206. (deftrap _temptopmem nil
  207.    (:stack :pointer)
  208.    (:stack-trap #xA88F (22 :signed-integer)))
  209.  
  210. ;   Temporary Memory routines as they were known before System 7.0.  
  211.  
  212. (deftrap _mfmaxmem ((grow (:pointer :signed-long)))
  213.    (:stack :signed-long)
  214.    (:stack-trap #xA88F grow (21 :signed-integer)))
  215.  
  216. (deftrap _mffreemem nil
  217.    (:stack :signed-long)
  218.    (:stack-trap #xA88F (24 :signed-integer)))
  219.  
  220. (deftrap _mftempnewhandle ((logicalsize :signed-long) (resultcode (:pointer :signed-integer)))
  221.    (:stack :handle)
  222.    (:stack-trap #xA88F logicalsize resultcode (29 :signed-integer)))
  223.  
  224. (deftrap _mftemphlock ((h :handle) (resultcode (:pointer :signed-integer)))
  225.    nil
  226.    (:stack-trap #xA88F h resultcode (30 :signed-integer)))
  227.  
  228. (deftrap _mftemphunlock ((h :handle) (resultcode (:pointer :signed-integer)))
  229.    nil
  230.    (:stack-trap #xA88F h resultcode (31 :signed-integer)))
  231.  
  232. (deftrap _mftempdisposhandle ((h :handle) (resultcode (:pointer :signed-integer)))
  233.    nil
  234.    (:stack-trap #xA88F h resultcode (32 :signed-integer)))
  235.  
  236. (deftrap _mftopmem nil
  237.    (:stack :pointer)
  238.    (:stack-trap #xA88F (22 :signed-integer)))
  239.  
  240. (deftrap _initapplzone nil
  241.    nil
  242.    (:stack-trap #xA02C))
  243.  
  244. (deftrap _initzone ((pgrowzone :pointer) (cmoremasters :signed-integer) (limitptr :pointer) (startptr :pointer))
  245.   (:no-trap :signed-integer)
  246.   (:no-trap (ccl:%stack-block ((p 14))
  247.                (%put-ptr p startptr 0)
  248.                (%put-ptr p limitptr 4)
  249.                (%put-word p cmoremasters 8)
  250.                (%put-ptr p pgrowzone 10)
  251.                (ccl:register-trap #xA019 :a0 p (:signed-integer :d0)))))
  252.  
  253. (deftrap _setzone ((hz (:pointer :zone)))
  254.    nil
  255.    (:register-trap #xA01B :a0 hz))
  256.  
  257. (deftrap _compactmem ((cbneeded :signed-long))
  258.    (:d0 :signed-long)
  259.    (:register-trap #xA04C :d0 cbneeded))
  260.  
  261. (deftrap _purgemem ((cbneeded :signed-long))
  262.    nil
  263.    (:register-trap #xA04D :d0 cbneeded))
  264.  
  265. (deftrap _purgememsys ((cbneeded :signed-long))
  266.    nil
  267.    (:register-trap #xA44D :d0 cbneeded))
  268.  
  269. (deftrap _freemem () (:d0 :signed-long) (:register-trap 40988))
  270.  
  271.  
  272. (deftrap _resrvmem ((cbneeded :signed-long))
  273.    nil
  274.    (:register-trap #xA040 :d0 cbneeded))
  275.  
  276. (deftrap _reservemem ((cbneeded :signed-long))
  277.    nil
  278.    (:register-trap #xA040 :d0 cbneeded))
  279.  
  280. (deftrap _reservememsys ((cbneeded :signed-long))
  281.    nil
  282.    (:register-trap #xA440 :d0 cbneeded))
  283.  
  284. ; Note: GROW will always be set to 0 when this is called from MCL.
  285. (deftrap _maxmem ((grow (:pointer :signed-long)))
  286.   (:no-trap :long)
  287.   (:no-trap
  288.    (ccl:%stack-block ((ret 8))
  289.      (ccl:%gen-trap 41245 :return-block ret '(:a0 :d0))
  290.      (%put-long grow (%get-long ret))
  291.      (%get-long ret 4))))
  292.  
  293. (deftrap _setgrowzone ((growzone :pointer))
  294.    nil
  295.    (:register-trap #xA04B :a0 growzone))
  296.  
  297. (deftrap _setappllimit ((zonelimit :pointer))
  298.    nil
  299.    (:register-trap #xA02D :a0 zonelimit))
  300.  
  301. (deftrap _movehhi ((h :handle))
  302.    nil
  303.    (:register-trap #xA064 :a0 h))
  304.  
  305. (deftrap _disposptr ((p :pointer))
  306.    nil
  307.    (:register-trap #xA01F :a0 p))
  308.  
  309. (deftrap _disposeptr ((p :pointer))
  310.    nil
  311.    (:register-trap #xA01F :a0 p))
  312.  
  313. (deftrap _getptrsize ((p :pointer))
  314.    (:d0 :signed-long)
  315.    (:register-trap #xA021 :a0 p))
  316.  
  317. (deftrap _setptrsize ((p :pointer) (newsize :signed-long))
  318.    nil
  319.    (:register-trap #xA020 :a0 p :d0 newsize))
  320. (deftrap _disposhandle ((h :handle))
  321.    nil
  322.    (:register-trap #xA023 :a0 h))
  323.  
  324. (deftrap _disposehandle ((h :handle))
  325.    nil
  326.    (:register-trap #xA023 :a0 h))
  327.  
  328. (deftrap _gethandlesize ((h :handle))
  329.    (:d0 :signed-long)
  330.    (:register-trap #xA025 :a0 h))
  331. (deftrap _sethandlesize ((h :handle) (newsize :signed-long))
  332.    nil
  333.    (:register-trap #xA024 :a0 h :d0 newsize))
  334. (deftrap _emptyhandle ((h :handle))
  335.    nil
  336.    (:register-trap #xA02B :a0 h))
  337.  
  338. ; Warning. Assuming that (logicalsize long word) matches (bytecount :signed-long) in trap reallochandle
  339. (deftrap _reallochandle ((h :handle) (bytecount :signed-long))
  340.    nil
  341.    (:register-trap #xA027 :a0 h :d0 bytecount))
  342. (DEFTRAP _REALLOCATEHANDLE ((H :HANDLE) (BYTECOUNT :SIGNED-LONG))
  343.   NIL
  344.   (:REGISTER-TRAP #xA027 :A0 H :D0 BYTECOUNT))
  345. (deftrap _hsetrbit ((h :handle))
  346.    nil
  347.    (:register-trap #xA067 :a0 h))
  348.  
  349. (deftrap _hclrrbit ((h :handle))
  350.    nil
  351.    (:register-trap #xA068 :a0 h))
  352.  
  353. (deftrap _moremasters nil
  354.    nil
  355.    (:stack-trap #xA036))
  356.  
  357. (deftrap _blockmove ((srcptr :pointer) (destptr :pointer) (bytecount :signed-long))
  358.    nil
  359.    (:register-trap #xA02E :a0 srcptr :a1 destptr :d0 bytecount))
  360. (deftrap _memerror nil
  361.    (:no-trap :signed-integer)
  362.    (:no-trap (%get-signed-word (%int-to-ptr 544))))
  363.  
  364. ; Warning. Register trap purgespace returns multiple values: ((:a0 (contig long word)) (:d0 (total long word)))
  365. (DEFTRAP _PURGESPACE ((TOTAL (:POINTER :SIGNED-LONG))
  366.                       (CONTIG (:POINTER :SIGNED-LONG)))
  367.   ((:A0 :SIGNED-LONG) (:D0 :SIGNED-LONG))
  368.   (MULTIPLE-VALUE-BIND (TOTAL-VALUE CONTIG-VALUE) (:REGISTER-TRAP 41314)
  369.     (%PUT-LONG TOTAL TOTAL-VALUE)
  370.     (%PUT-LONG CONTIG CONTIG-VALUE)))
  371.  
  372. (deftrap _hgetstate ((h :handle))
  373.    (:d0 :signed-byte)
  374.    (:register-trap #xA069 :a0 h))
  375. (deftrap _hsetstate ((h :handle) (flags :signed-byte))
  376.    nil
  377.    (:register-trap #xA06A :a0 h :d0 flags))
  378. (deftrap _setapplbase ((startptr :pointer))
  379.    nil
  380.    (:register-trap #xA057 :a0 startptr))
  381.  
  382. (deftrap _maxapplzone nil
  383.    nil
  384.    (:stack-trap #xA063))
  385.  
  386. (deftrap _holdmemory ((address :pointer) (count :signed-long))
  387.    (:d0 :signed-integer)
  388.    (:register-trap #xA08D :a0 address :a1 (%int-to-ptr count) :d0 0))
  389.  
  390. (deftrap _unholdmemory ((address :pointer) (count :signed-long))
  391.    (:d0 :signed-integer)
  392.    (:register-trap #xA08D :a0 address :a1 (%int-to-ptr count) :d0 1))
  393.  
  394. (deftrap _lockmemory ((address :pointer) (count :signed-long))
  395.    (:d0 :signed-integer)
  396.    (:register-trap #xA08D :a0 address :a1 (%int-to-ptr count) :d0 2))
  397.  
  398. (deftrap _lockmemorycontiguous ((address :pointer) (count :signed-long))
  399.    (:d0 :signed-integer)
  400.    (:register-trap #xA08D :a0 address :a1 (%int-to-ptr count) :d0 4))
  401.  
  402. (deftrap _unlockmemory ((address :pointer) (count :signed-long))
  403.    (:d0 :signed-integer)
  404.    (:register-trap #xA08D :a0 address :a1 (%int-to-ptr count) :d0 3))
  405.  
  406. (deftrap _getphysical ((addresses (:pointer :logicaltophysicaltable)) 
  407.                        (physicalentrycount (:pointer :signed-long)))
  408.    (:no-trap :signed-integer)
  409.    (:no-trap (ccl::%stack-block ((ret 8))
  410.                (ccl::%gen-trap #xA15C :return-block ret 
  411.                       :d0 5 
  412.                       :a1 (%get-ptr physicalentrycount) 
  413.                       :a0 addresses 
  414.                       '(:d0 :a0))
  415.                (%put-ptr physicalentrycount (%get-ptr ret 4))
  416.                (%get-word ret 2))))
  417.  
  418. (deftrap _deferuserfn ((userfunction :pointer) (argument :pointer))
  419.    (:d0 :signed-integer)
  420.    (:register-trap #xA08F :a0 userfunction :d0 (ccl::%ptr-to-int argument)))
  421.  
  422. (deftrap _debuggergetmax nil
  423.    (:d0 :signed-long)
  424.    (:register-trap #xA08D :d0 0))
  425.  
  426. (deftrap _debuggerenter nil
  427.    nil
  428.    (:register-trap #xA08D :d0 1))
  429.  
  430.  
  431. (deftrap _debuggerexit nil
  432.    nil
  433.    (:register-trap #xA08D :d0 2))
  434.  
  435. (deftrap _debuggerpoll nil
  436.    nil
  437.    (:register-trap #xA08D :d0 3))
  438.  
  439. (deftrap _getpagestate ((address :pointer))
  440.    (:d0 :signed-integer)
  441.    (:register-trap #xA08D :a0 address :d0 4))
  442.  
  443. (deftrap _pagefaultfatal nil
  444.    (:d0 :boolean)
  445.    (:register-trap #xA08D :d0 5))
  446.  
  447. (deftrap _debuggerlockmemory ((address :pointer) (count :signed-long))
  448.    (:d0 :signed-integer)
  449.    (:register-trap #xA08D :a0 address :a1 (%int-to-ptr count) :d0 6))
  450.  
  451. (deftrap _debuggerunlockmemory ((address :pointer) (count :signed-long))
  452.    (:stack :signed-integer)
  453.    (:register-trap #xA08D :a0 address :a1 (%int-to-ptr count) :d0 7))
  454.  
  455. (deftrap _entersupervisormode nil
  456.    (:d0 :signed-integer)
  457.    (:register-trap #xA08D :d0 8))
  458.  
  459.  
  460. ; $ENDC                         ;  UsingMemory 
  461.  
  462. ; $IFC NOT UsingIncludes
  463.  
  464. ; $ENDC
  465.  
  466.  
  467. (export '($knotpaged $kpageondisk $kpageinmemory $defaultphysicalentrycount
  468.           $maxsize))
  469. (provide-interface 'MEMORY)
  470.